package com.office.automate.service.def.leave;

import java.util.HashMap;
import java.util.List;
import java.util.Map;

import com.office.automate.exception.framework.FrontierVisibleException;
import com.office.automate.model.leave.EmployeeLeave;
import com.office.automate.model.leave.LeaveRequest;
import com.office.automate.model.leave.LieuLeaveRequest;

public interface EmployeeLeaveService {

	public List<EmployeeLeave> getCurrentEntitlementBalance(long anEmployeeId) throws FrontierVisibleException;

	public EmployeeLeave getCurrentEntitlementBalance(int aFnYear, long anEmployeeId) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateLeaveRequestDetails(LeaveRequest leaveRequest) throws FrontierVisibleException;

	public void addLeaveRequest(LeaveRequest leaveRequest) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeLeaveDetailsPage(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeLeaveRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	public void cancelLeaveRequest(LeaveRequest aLeaveRequest) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeLeaveApprovalRequestPage(int aStartingIndex, int aNumberOfRecords, long aCurrentLoginUserId) throws FrontierVisibleException;

	public int getAvailableEmployeeLeaveApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;

	public void approveLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public void rejectLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public HashMap<String, FrontierVisibleException> validateLieuLeaveRequestDetails(LieuLeaveRequest lieuLeaveRequest)  throws FrontierVisibleException;

	public void addLieuLeaveRequest(LieuLeaveRequest lieuLeaveRequest) throws FrontierVisibleException;

	public void cancelLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public void approveLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	public void rejectLieuLeaveRequest(long aRequestId) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeLieuLeaveRequestPage(Map<String, Object> aQueryCriterias, int aStartingIndex, int aNumberOfRecords) throws FrontierVisibleException;

	public int getAvailableEmployeeLieuLeaveRequestsRecordCount(Map<String, Object> aQueryCriterias) throws FrontierVisibleException;

	@SuppressWarnings("rawtypes")
	public List<List> getEmployeeLieuLeaveApprovalRequestPage(int aStartingIndex, int aNumberOfRecords, long aCurrentLoginUserId) throws FrontierVisibleException;

	public int getAvailableEmployeeLieuLeaveApprovalRequestRecordCount(long aCurrentLoginUserId) throws FrontierVisibleException;
}
